package com.hyc.myvideo.utils;

import android.app.ActivityManager;
import android.app.Application;
import android.content.Context;
import android.support.annotation.NonNull;

import com.acmenxd.toaster.ToastDuration;
import com.acmenxd.toaster.ToastNW;
import com.acmenxd.toaster.Toaster;
import com.alivc.player.AccessKey;
import com.alivc.player.AccessKeyCallback;
import com.alivc.player.AliVcMediaPlayer;
import com.hyc.RxRetrofitApp;
import com.hyc.myvideo.BuildConfig;
import com.hyc.myvideo.data.api.constants.Constants;
import com.hyc.myvideo.utils.imguitl.PicassoImageLoader;
import com.hyphenate.chat.EMClient;
import com.hyphenate.chat.EMOptions;
import com.lzy.imagepicker.ImagePicker;
import com.lzy.imagepicker.view.CropImageView;
import com.umeng.socialize.PlatformConfig;
import com.umeng.socialize.UMShareAPI;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.List;

import timber.log.Timber;

/**
 * 全局初始化配置
 * @author gyb
 * @version 1.0
 * @created 2017/06/20
 */
public final class AppConfig {
    private Context xContext;
    // 记录是否已经初始化
    private boolean isInit = false;
    public AppConfig(@NonNull Application pContext) {
        this.xContext = pContext;
//        System.loadLibrary("gnustl_shared");
////        System.loadLibrary("ijkffmpeg");//目前使用微博的ijkffmpeg会出现1K再换wifi不重连的情况
//        System.loadLibrary("qupai-media-thirdparty");
////        System.loadLibrary("alivc-media-jni");
//        System.loadLibrary("qupai-media-jni");
//        ApplicationGlue.initialize(pContext);
        RxRetrofitApp.init(pContext,BuildConfig.DEBUG, Constants.API_URL);

        if (BuildConfig.DEBUG) {
            Timber.plant(new Timber.DebugTree());
        }
        init();
    }
    private void init(){
        PlayerConfig();
        umengConfig();
        setToasterConfig(true);
        initEasemob();
        imagePicker();
    }


    /***
     * 友盟分享配置
     */
    private void umengConfig() {
        PlatformConfig.setWeixin("wx967daebe835fbeac", "5bb696d9ccd75a38c8a0bfe0675559b3");
        PlatformConfig.setSinaWeibo("1642428042", "ce6ecc836cbdebd1c3b55fd6a6f0565c", "http://sns.whalecloud.com");
        PlatformConfig.setQQZone("1105900060", "JmVyiyl2rB1XSpvW");
        UMShareAPI.get(xContext);
    }

    /***
     * 配置Toast
     * 设置debug开关,可根据debug-release配置
     * @param isdebug
     */
    private void setToasterConfig(boolean isdebug) {
        /**
         * 设置Context对象
         * * 必须设置,否则无法使用
         */
        Toaster.setContext(xContext);
        /**
         * 设置debug开关,可根据debug-release配置
         * 默认为true
         */
        Toaster.setDebugOpen(isdebug);
        /**
         * 设置默认显示时长
         * 默认为ToastD.SHORT = Toast.LENGTH_SHORT
         */
        Toaster.setDefaultDuration(ToastDuration.SHORT);
        /**
         * 设置Toaster显示方式 :  |
         * 默认为ToastNW.NEED_WAIT(Toast需要等待,并逐个显示) 可设置为:ToastNW.No_NEED_WAIT(Toast无需等待,直接显示)
         */
        Toaster.setNeedWait(ToastNW.NEED_WAIT);
    }

    /***
     * 初始化阿里云 播放器
     */
    private void PlayerConfig(){
        Timber.i("阿里云播放器初始化中....");
        try {
            InputStreamReader inputReader = new InputStreamReader(xContext.getResources().getAssets().open("accesstoken.txt"));
            BufferedReader fileReader = new BufferedReader(inputReader);
            final String accessKeyId = fileReader.readLine();
            final String accessKeySecret = fileReader.readLine();
            final String businessId = "video_live";
            AliVcMediaPlayer.init(xContext, businessId, new AccessKeyCallback() {
                public AccessKey getAccessToken() {
                    return new AccessKey(accessKeyId, accessKeySecret);
                }
            });
           Timber.i("accessKeyId=="+accessKeyId +"; accessKeySecret=="+accessKeySecret);
            Timber.i("阿里云播放器完成初始化");
        } catch (Throwable t) {
            t.printStackTrace();
            Timber.i("初始化播放器异常");
        }
    }


    /**
     *环信配置
     */
    private void initEasemob() {
        // 获取当前进程 id 并取得进程名
        int pid = android.os.Process.myPid();
        String processAppName = getAppName(pid);
        /**
         * 如果app启用了远程的service，此application:onCreate会被调用2次
         * 为了防止环信SDK被初始化2次，加此判断会保证SDK被初始化1次
         * 默认的app会在以包名为默认的process name下运行，如果查到的process name不是app的process name就立即返回
         */
        if (processAppName == null || !processAppName.equalsIgnoreCase(xContext.getPackageName())) {
            // 则此application的onCreate 是被service 调用的，直接返回
            return;
        }
        if (isInit) {
            return;
        }
        // 调用初始化方法初始化sdk
        EMClient.getInstance().init(xContext, initOptions());
        // 设置开启debug模式
        EMClient.getInstance().setDebugMode(true);
        // 设置初始化已经完成
        isInit = true;
    }

    /**
     * SDK初始化的一些配置
     * 关于 EMOptions 可以参考官方的 API 文档
     * http://www.easemob.com/apidoc/android/chat3.0/classcom_1_1hyphenate_1_1chat_1_1_e_m_options.html
     */
    private EMOptions initOptions() {
        EMOptions options = new EMOptions();
        // 设置Appkey，如果配置文件已经配置，这里可以不用设置
        options.setAppKey("1112170706178431#hyc");
        // 设置自动登录
        options.setAutoLogin(true);
        // 设置是否需要发送已读回执
        options.setRequireAck(true);
        // 设置是否需要发送回执，
        options.setRequireDeliveryAck(true);
        // 设置是否需要服务器收到消息确认
        //options.setRequireServerAck(true);
        // 设置是否根据服务器时间排序，默认是true
        options.setSortMessageByServerTime(false);
        // 收到好友申请是否自动同意，如果是自动同意就不会收到好友请求的回调，因为sdk会自动处理，默认为true
        options.setAcceptInvitationAlways(false);
        // 设置是否自动接收加群邀请，如果设置了当收到群邀请会自动同意加入
        options.setAutoAcceptGroupInvitation(false);
        // 设置（主动或被动）退出群组时，是否删除群聊聊天记录
        options.setDeleteMessagesAsExitGroup(false);
        // 设置是否允许聊天室的Owner 离开并删除聊天室的会话
        options.allowChatroomOwnerLeave(true);
        // 设置google GCM推送id，国内可以不用设置
        // options.setGCMNumber(MLConstants.ML_GCM_NUMBER);
        // 设置集成小米推送的appid和appkey
        // options.setMipushConfig(MLConstants.ML_MI_APP_ID, MLConstants.ML_MI_APP_KEY);

        return options;
    }

    /**
     * 根据Pid获取当前进程的名字，一般就是当前app的包名
     * @param pid 进程的id
     * @return 返回进程的名字
     */
    private String getAppName(int pid) {
        String processName = null;
        ActivityManager activityManager = (ActivityManager) xContext.getSystemService(Context.ACTIVITY_SERVICE);
        List list = activityManager.getRunningAppProcesses();
        Iterator i = list.iterator();
        while (i.hasNext()) {
            ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo) (i.next());
            try {
                if (info.pid == pid) {
                    // 根据进程的信息获取当前进程的名字
                    processName = info.processName;
                    // 返回当前进程名
                    return processName;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        // 没有匹配的项，返回为null
        return null;
    }

    /***
     * 图片选择器配置
     */
    private void imagePicker(){
        ImagePicker imagePicker = ImagePicker.getInstance();
        imagePicker.setImageLoader(new PicassoImageLoader());   //设置图片加载器
        imagePicker.setShowCamera(true);  //显示拍照按钮
        imagePicker.setCrop(true);        //允许裁剪（单选才有效）
        imagePicker.setSaveRectangle(true); //是否按矩形区域保存
        imagePicker.setSelectLimit(1);    //选中数量限制
        imagePicker.setStyle(CropImageView.Style.CIRCLE);  //裁剪框的形状
        imagePicker.setFocusWidth(800);   //裁剪框的宽度。单位像素（圆形自动取宽高最小值）
        imagePicker.setFocusHeight(800);  //裁剪框的高度。单位像素（圆形自动取宽高最小值）
        imagePicker.setOutPutX(1000);//保存文件的宽度。单位像素
        imagePicker.setOutPutY(1000);//保存文件的高度。单位像素
    }

}
